iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
Mobile Development

Jetpack Compose 從心開始系列 第 7

Jetpack Compose 從心開始 Day7 - 建立可捲動的清單

  • 分享至 

  • xImage
  •  

前言

    設計中秋卡片應用程式,練習用Compose LazyColumn ,我要一次來十個圖文

建立可捲動的清單

建立 Congratulations 資料類別

data class Congratulations(
    @StringRes val stringResourceId: Int,
    @DrawableRes val imageResourceId: Int
)
class Datasource() {
    fun loadCongratulations(): List<Congratulations> {
        return listOf<Congratulations>(
            Congratulations(R.string.congratulatory_msg1, R.drawable.moon_1),
            ...
            Congratulations(R.string.congratulatory_msg10, R.drawable.moon_10))
    }
}

建立List Item Card

@Composable
fun CongratulationsCard(congratulation: Congratulations, modifier: Modifier = Modifier) {
    Card(modifier = modifier) {
        Column {
            Image(
                painter = painterResource(congratulation.imageResourceId),
                contentDescription = stringResource(congratulation.stringResourceId),
                modifier = Modifier,
                contentScale = ContentScale.FillWidth
            )
            Text(
                text = LocalContext.current.getString(congratulation.stringResourceId),
                modifier = Modifier.padding(16.dp),
                style = MaterialTheme.typography.headlineSmall
            )
        }
    }
}

@Preview
@Composable
private fun CongratulationsCardPreview() {
    CongratulationsCard(Congratulations(R.string.congratulatory_msg1, R.drawable.moon_1))
}

建立清單

使用 LazyColumn 可組合函式建立可捲動的清單。

@Composable
fun CongratulationsList(congratulationsList: List<Congratulations>, modifier: Modifier = Modifier) {
    LazyColumn(modifier = modifier) {
        items(congratulationsList) { congratulation ->
            CongratulationsCard(
                congratulation = congratulation,
                modifier = Modifier.padding(8.dp)
            )
        }
    }
}

@Preview(showBackground = true)
@Composable
fun CongratulationsListAppPreview() {
    Ironman2024Theme {
        CongratulationsListApp(Modifier)
    }
}

執行結果

https://ithelp.ithome.com.tw/upload/images/20240917/20121643Bzjg4Apy7D.png


上一篇
Jetpack Compose 從心開始 Day6 - 與輸入框 UI 和狀態互動
下一篇
Jetpack Compose 從心開始 Day8 - Material Design 主題調色工具
系列文
Jetpack Compose 從心開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言